package com.rx.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import com.rx.entity.Pictures;
import com.rx.service.PicturesServiceI;
import com.rx.service.PicturesServiceImpl;

/**
 * 
 * @类名: PicturesServlet
 * @描述: @MultipartConfig 标识Servlet支持文件上传 说明该Servlet处理的是multipart/form-data类型的请求
 *      具体参数： fileSizeThershold int型 是（可选） 描述：当前数据量大于该值时，内容将被写入文件。 location
 *      String型 是（可选） 描述：存放生成文件的地址 maxFileSize long型 是（可选）
 *      描述：允许上传的文件最大值，默认为-1，表示没有限制 maxRequestSize long型 是（可选） 描述：针对
 *      multipart/form-data 请求的最大数量，默认为-1，表示没有限制
 * @作者：侯建军
 * @日期：2018年6月26日 上午9:18:50
 *
 */
@WebServlet("/admin/PicturesServlet")
@MultipartConfig
public class PicturesServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		PicturesServiceI psi = new PicturesServiceImpl();
		List<Pictures> list;
		try {
			list = psi.getAll();
			System.out.println(list.size());
			request.setAttribute("list", list);
			request.getRequestDispatcher("/admin/pictures.jsp").forward(request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获取请求参数一定要写在开始，否则会出现乱码。
		String picType = request.getParameter("picType");
		String picDesc = request.getParameter("picDesc");
		
		// 获取输出流
		PrintWriter out = response.getWriter();
		// Part对象
		Part part = request.getPart("picUrl");

		// 获取HTTP头信息headerInfo=（form-data; name="file" filename="文件名"）
		String headerInfo = part.getHeader("content-disposition");

		// 从HTTP头信息中获取文件名fileName=（文件名）
		String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1);
		// 获取扩展名
		String ext = fileName.substring(fileName.lastIndexOf("."), fileName.length());

		long filename = new Date().getTime();

		// 获得存储上传文件的文件夹路径 web目录
		String fileSavingFolder = this.getServletContext().getRealPath("/pictures");
		// long fileName=
		// 获得存储上传文件的完整路径（文件夹路径+文件名）
		// 文件夹位置固定，文件夹采用与上传文件的原始名字相同
		String fileSavingPath = fileSavingFolder + File.separator + filename + ext;
		// 将文件路径存入数据库
		PicturesServiceI psi = new PicturesServiceImpl();
		Pictures pic = new Pictures();
		pic.setPicType(Integer.valueOf(picType));
		pic.setPicUrl(File.separator+"pictures"+File.separator + filename + ext);
		pic.setPicDesc(picDesc);
		
		pic.setGoodsId(1);
		
		try {
			if (psi.add(pic)) {
				// 如果存储上传文件的文件夹不存在，则创建文件夹
				File f = new File(fileSavingFolder + File.separator);
				// 如果文件不存在则创建
				if (!f.exists()) {
					f.mkdirs();
				}
				// 将上传的文件内容写入服务器文件中
				part.write(fileSavingPath);
				// 输出上传成功信息
				out.println("文件上传成功~！");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
